package com.gxa.weixing.pc.service.impl;

import com.github.pagehelper.PageInfo;
import com.github.pagehelper.page.PageMethod;
import com.gxa.weixing.core.common.ExceptionCode;
import com.gxa.weixing.core.exception.BusinessException;
import com.gxa.weixing.core.pojo.Supplier;
import com.gxa.weixing.core.service.impl.BaseServiceImpl;
import com.gxa.weixing.core.util.VerifyParamUtil;
import com.gxa.weixing.pc.mapper.SupplierMapper;
import com.gxa.weixing.pc.service.SupplierService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author lijianmin
 * @date 2022/01/06  17:03:25
 */
@Service("supplierService")
@Transactional(rollbackFor = Throwable.class)
public class SupplierServiceImpl extends BaseServiceImpl<Supplier> implements SupplierService {

    @Resource
    private SupplierMapper supplierMapper;

    /**
     * 根据特定条件获取供应商列表的方法
     *
     * @param map 条件
     *            name: 供应商名称 模糊
     *            principal:负责人名称 模糊
     *            state: 状态
     *            principalPhone: 负责人手机号 模糊
     *            site: 地址 模糊
     *            startTime: 入驻时间的起止时间
     *            endTime: 入驻时间的起止时间
     *            page: 页码
     *            size: 每页数据量
     * @return 返回信息
     */
    @Override
    public PageInfo<Supplier> getList(Map<String, Object> map) throws BusinessException {
        // 获取分页信息
        Integer page = VerifyParamUtil.pageDefaultOneVerify(map.get("page"));
        Integer size = VerifyParamUtil.sizeInfiniteVerify(map.get("size"));
        // 开启分页
        PageMethod.startPage(page, size);

        // 获取其他字段
        // 供应商名称 模糊
        String name = VerifyParamUtil.stringVerifyParam(map.get("name"));
        // 负责人名称 模糊
        String principal = VerifyParamUtil.stringVerifyParam(map.get("principal"));
        // 状态
        Boolean state = VerifyParamUtil.booleanVerifyParam(map.get("state"));
        // 负责人手机号 模糊
        String principalPhone = VerifyParamUtil.stringVerifyParam(map.get("principalPhone"));
        // 地址 模糊
        String site = VerifyParamUtil.stringVerifyParam(map.get("site"));
        // 入驻时间 的起止时间
        Date startTime = VerifyParamUtil.dataVerifyParam(map.get("startTime"));
        Date endTime = VerifyParamUtil.dataVerifyParam(map.get("endTime"));

        // 根据条件获取供应商列表
        List<Supplier> list = supplierMapper.getList(name, principal, state, principalPhone, site, startTime, endTime);
        System.out.println(list);
        System.out.println("--------------list");
        // 返回带分页的数据
        return PageInfo.of(list);
    }

    /**
     * 修改供应商方法
     *
     * @param supplier 供应商对象
     */
    @Override
    public void update(Supplier supplier) throws BusinessException {
        // 进行是否为空校验
        VerifyParamUtil.checkParams(supplier);

        //将修改时间替换成当前时间
        supplier.setUpdateTime(new Date());
        // 进行修改操作
        Integer supplierUpdate = updateById(supplier);
        // 进行验证 如果返回值不正常则抛异常
        if (supplierUpdate == null || supplierUpdate < 1) {
            throw new BusinessException(ExceptionCode.UPDATE_ERROR);
        }
    }


    /**
     * 删除供应商方法
     *
     * @param id 删除供应商的编号
     */
    @Override
    public void delete(Long id) throws BusinessException {
        // 进行是否为空校验
        VerifyParamUtil.checkParams(id);
        // 进行删除操作
        Integer supplierDelete = deleteById(id);
        // 进行验证 如果返回值不正常则抛异常
        if (supplierDelete == null || supplierDelete < 1) {
            throw new BusinessException(ExceptionCode.DELETE_ERROR);
        }
    }

    /**
     * 添加供应商方法
     *
     * @param supplier 添加供应商的对象
     */
    @Override
    public void add(Supplier supplier) throws BusinessException {
        // 进行是否为空校验
        VerifyParamUtil.checkParams(supplier);
        supplier.setAddTime(new Date());
        supplier.setUpdateTime(new Date());
        supplier.setState(true);
        // 进行添加操作
        Supplier supplierAdd = insert(supplier);
        // 进行验证 如果返回值不正常则抛异常
        if (supplierAdd == null || supplierAdd.getId() == null) {
            throw new BusinessException(ExceptionCode.ADD_ERROR);
        }
    }
}
